#include <iostream>
using namespace std;

template <typename T> class SeqList {
private:
  T *data;      // 存储数据的数组
  int capacity; // 顺序表容量
  int length;   // 当前长度

public:
  // 构造函数（创建顺序表）
  SeqList() : capacity(10), length(0) { data = new T(capacity); }
  SeqList(int capacity) : capacity(capacity), length(0) {
    data = new T[capacity];
  }

  // 析构函数
  ~SeqList() { delete[] data; }

  // 在最后位置插入元素elem
  bool append(const T &elem) {
    if (length == capacity) {
      return false;
    }
    data[length] = elem;
    ++length;
    return true;
  }

  // 在位置pos插入元素elem
  bool insert(int pos, const T &elem) {
    if (pos < 0 || pos > length) {
      return false;
    }
    if (length == capacity) {
      return false;
    }

    for (int i = length; i > pos; --i) {
      data[i] = data[i - 1];
    }
    data[pos] = elem;
    ++length;
    return true;
  }

  // 删除位置pos的元素
  bool remove(int pos) {
    if (pos < 0 || pos >= length) {
      return false;
    }

    for (int i = pos; i < length - 1; ++i) {
      data[i] = data[i + 1];
    }
    --length;
    return true;
  }

  // 遍历顺序表
  void traverse() const {
    cout << "顺序表内容：";
    for (int i = 0; i < length; ++i) {
      cout << data[i] << " ";
    }
    cout << " 顺序表length : " << length << endl;
  }

  int getLength() const { return length; }
};

int main() {
  SeqList<int> list(5);

  list.insert(0, 800);
  list.insert(0, 700);
  list.insert(0, 600);
  list.insert(0, 500);
  list.append(50);
  list.traverse();
  list.remove(3);

  list.traverse();
  return 0;
}